BACKGROUND
SUMMARY
BRIEF DESCRIPTION OF THE FIGURES
DETAILED DESCRIPTION
Introduction
One Embodiment of a High Performance Network Interface Circuit
An Illustrative Packet
One Embodiment of a Header Parser
Dynamic Header Parsing Instructions in One Embodiment of the Invention
One Embodiment of a Flow Database
One Embodiment of a Flow Database Manager
One Embodiment of a Load Distributor
One Embodiment of a Packet Queue
One Embodiment of a Control Queue
One Embodiment of a DMA Engine
Methods of Transferring a Packet Into a Memory Buffer by a DMA Engine
A Method of Transferring a Packet with Operation Code 0
A Method of Transferring a Packet with Operation Code 1
A Method of Transferring a Packet with Operation Code 2
A Method of Transferring a Packet with Operation Code 3
A Method of Transferring a Packet with Operation Code 4
A Method of Transferring a Packet with Operation Code 5
A Method of Transferring a Packet with Operation Code 6 or 7
One Embodiment of a Dynamic Packet Batching Module
Early Random Packet Discard in One Embodiment of the Invention
CLAIMS
This invention relates to the fields of computer systems and computer networks. In particular, the present invention relates to a Network Interface Circuit (NIC) for processing communication packets exchanged between a computer network and a host computer system.
The interface between a computer and a network is often a bottleneck for communications passing between the computer and the network. While computer performance (e.g., processor speed) has increased exponentially over the years and computer network transmission speeds have undergone similar increases, inefficiencies in the way network interface circuits handle communications have become more and more evident. With each incremental increase in computer or network speed, it becomes ever more apparent that the interface between the computer and the network cannot keep pace. These inefficiencies involve several basic problems in the way communications between a network and a computer are handled.
Today""s most popular forms of networks tend to be packet-based. These types of networks, including the Internet and many local area networks, transmit information in the form of packets. Each packet is separately created and transmitted by an originating endstation and is separately received and processed by a destination endstation. In addition, each packet may, in a bus topology network for example, be received and processed by numerous stations located between the originating and destination endstations.
One basic problem with packet networks is that each packet must be processed through multiple protocols or protocol levels (known collectively as a xe2x80x9cprotocol stackxe2x80x9d) on both the origination and destination endstations. When data transmitted between stations is longer than a certain minimal length, the data is divided into multiple portions, and each portion is carried by a separate packet. The amount of data that a packet can carry is generally limited by the network that conveys the packet and is often expressed as a maximum transfer unit (MTU). The original aggregation of data is sometimes known as a xe2x80x9cdatagram,xe2x80x9d and each packet carrying part of a single datagram is processed very similarly to the other packets of the datagram.
Communication packets are generally processed as follows. In the origination endstation, each separate data portion of a datagram is processed through a protocol stack. During this processing multiple protocol headers (e.g., TCP, IP, Ethernet) are added to the data portion to form a packet that can be transmitted across the network. The packet is received by a network interface circuit, which transfers the packet to the destination endstation or a host computer that serves the destination endstation. In the destination endstation, the packet is processed through the protocol stack in the opposite direction as in the origination endstation. During this processing the protocol headers are removed in the opposite order in which they were applied. The data portion is thus recovered and can be made available to a user, an application program, etc.
Several related packets (e.g., packets carrying data from one datagram) thus undergo substantially the same process in a serial manner (i.e., one packet at a time). The more data that must be transmitted, the more packets must be sent, with each one being separately handled and processed through the protocol stack in each direction. Naturally, the more packets that must be processed, the greater the demand placed upon an endstation""s processor. The number of packets that must be processed is affected by factors other than just the amount of data being sent in a datagram. For example, as the amount of data that can be encapsulated in a packet increases, fewer packets need to be sent. As stated above, however, a packet may have a maximum allowable size, depending on the type of network in use (e.g., the maximum transfer unit for standard Ethernet traffic is approximately 1,500 bytes). The speed of the network also affects the number of packets that a NIC may handle in a given period of time. For example, a gigabit Ethernet network operating at peak capacity may require a NIC to receive approximately 1.48 million packets per second. Thus, the number of packets to be processed through a protocol stack may place a significant burden upon a computer""s processor. The situation is exacerbated by the need to process each packet separately even though each one will be processed in a substantially similar manner.
A related problem to the disjoint processing of packets is the manner in which data is moved between xe2x80x9cuser spacexe2x80x9d (e.g., an application program""s data storage) and xe2x80x9csystem spacexe2x80x9d (e.g., system memory) during data transmission and receipt. Presently, data is simply copied from one area of memory assigned to a user or application program into another area of memory dedicated to the processor""s use. Because each portion of a datagram that is transmitted in a packet may be copied separately (e.g., one byte at a time), there is a nontrivial amount of processor time required and frequent transfers can consume a large amount of the memory bus"" bandwidth. Illustratively, each byte of data in a packet received from the network may be read from the system space and written to the user space in a separate copy operation, and vice versa for data transmitted over the network. Although system space generally provides a protected memory area (e.g., protected from manipulation by user programs), the copy operation does nothing of value when seen from the point of view of a network interface circuit. Instead, it risks over-burdening the host processor and retarding its ability to rapidly accept additional network traffic from the NIC. Copying each packet""s data separately can therefore be very inefficient, particularly in a high-speed network environment.
In addition to the inefficient transfer of data (e.g., one packet""s data at a time), the processing of headers from packets received from a network is also inefficient. Each packet carrying part of a single datagram generally has the same protocol headers (e.g., Ethernet, IP and TCP), although there may be some variation in the values within the packets"" headers for a particular protocol. Each packet, however, is individually processed through the same protocol stack, thus requiring multiple repetitions of identical operations for related packets. Successively processing unrelated packets through different protocol stacks will likely be much less efficient than progressively processing a number of related packets through one protocol stack at a time.
Another basic problem concerning the interaction between present network interface circuits and host computer systems is that the combination often fails to capitalize on the increased processor resources that are available in multi-processor computer systems. In other words, present attempts to distribute the processing of network packets (e.g., through a protocol stack) among a number of protocols in an efficient manner are generally ineffective. In particular, the performance of present NICs does not come close to the expected or desired linear performance gains one may expect to realize from the availability of multiple processors. In some multi-processor systems, little improvement in the processing of network traffic is realized from the use of more than 4-6 processors, for example.
In addition, the rate at which packets are transferred from a network interface circuit to a host computer or other communication device may fail to keep pace with the rate of packet arrival at the network interface. One element or another of the host computer (e.g., a memory bus, a processor) may be over-burdened or otherwise unable to accept packets with sufficient alacrity. In this event one or more packets may be dropped or discarded. Dropping packets may cause a network entity to re-transmit some traffic and, if too many packets are dropped, a network connection may require re-initialization. Further, dropping one packet or type of packet instead of another may make a significant difference in overall network traffic. If, for example, a control packet is dropped, the corresponding network connection may be severely affected and may do little to alleviate the packet saturation of the network interface circuit because of the typically small size of a control packet. Therefore, unless the dropping of packets is performed in a manner that distributes the effect among many network connections or that makes allowance for certain types of packets, network traffic may be degraded more than necessary.
Thus, present NICs fail to provide adequate performance to interconnect today""s high-end computer systems and high-speed networks. In addition, a network interface circuit that cannot make allowance for an over-burdened host computer may degrade the computer""s performance.
In one embodiment of the invention a system and method are provided for distributing the processing of network packets among a plurality of processors on a multiprocessor computer. During such distributed processing, one or more headers associated with communication protocols used to construct and transmit the packets may be removed.
A communication device, such as a high performance network interface, receives a packet from a network. Identifiers of the packet""s source and destination entities are generated or assembled to form a flow key. The flow key identifies the communication flow, connection or circuit that includes the packet.
In this embodiment, a hashing function is performed on the flow key to generate a number that is smaller in magnitude than the flow key, and which is relatively evenly distributed among a range of possible values. With the result of the hash function, a modulus function is then performed over the number of processors in the host computer system. The result of the modulus function is a number identifying the processor that is to process this packet. Other packets in the same communication flow, which will generate the same flow key, will be submitted to the same processor. Illustratively, however, a packet received from a different source entity or for a different destination entity generates a different flow key and is submitted to a different processor.
The number of processors in the host computer may be stored by software operating on the host computer, such as a device driver for the communication device. When the software receives the packet from the device it submits the packet to the designated processor for processing through one or more protocols according to which the packet was formatted.
In another embodiment of the invention, a modulus function is performed directly on the flow key.
In yet another embodiment of the invention, load distribution may be disabled for a packet that is not formatted according to one or more of a set of pre-selected protocols. Where, for example, the network that conveys the packet is the Internet, the pre-selected protocols may include the Internet Protocol and the Transport Control Protocol. A communication device in this embodiment may include a header parser module configured to analyze or parse packets formatted according to these protocols for the purpose of enabling other operations, such as the re-assembly of data or the collective processing of multiple packets in one communication flow. The communication device may also include a flow database or flow database manager for managing the communication flows received at the device.